import { defineStore } from 'pinia'
import { TbUser, TbUserInfo, UserOtherInfo } from '../ts/UserInfo'
import { ApiService } from '../ts/ApiService'

// 本地保存count的信息
const localCounter = {
  load: () => {
    let count = localStorage.getItem('count') || 0
    return Number(count)
  },
  save: (count: number) => {
    localStorage.setItem('count', count.toString())
  },
}

// 本地存储的用户信息
const localUserInfo = {
  load: () => {
    let user = localStorage.getItem('user')
    if (user) {
      return JSON.parse(user)
    }
    return {
      login: false,
      tbUser: new TbUser(),
      tbUserInfo: new TbUserInfo(),
      userOtherInfo: new UserOtherInfo(),
    }
  },
  save: (user: any) => {
    localStorage.setItem('user', JSON.stringify(user))
  },
  remove: () => {
    localStorage.removeItem('user')
  },
}

export const store = defineStore('main', {
  // state的方法就是用来定义状态管理的变量
  state: () => {
    return {
      count: localCounter.load(),
      // 全局登录用户详细信息
      loginUser: localUserInfo.load(),
    }
  },
  // actions是用来定义状态管理要使用方法
  // 这里面声明的方法可以直接操控state中声明的变量
  actions: {
    increment() {
      this.count++
      localCounter.save(this.count)
    },
    // 更新用户信息的方法
    updateUser(cb: any) {
      // 发起后端请求获取当前登录的用户信息
      ApiService.post('/user/auth/getUserInfo', {}, (data: any) => {
        if (data.success) {
          // 获取服务器端登录用户信息
          let userinfo = {
            login: true,
            tbUser: data.tbUser,
            tbUserInfo: data.tbUserInfo,
            userOtherInfo: data.userOtherInfo,
          }
          // 保存本地
          localUserInfo.save(userinfo)
          // 更新状态管理中的用户信息
          this.loginUser = localUserInfo.load()
          cb()
        } else {
          // 删除本地存储的用户信息
          localUserInfo.remove()
          // 更新状态管理中的用户信息
          this.loginUser = localUserInfo.load()
          cb()
        }
      },true)
    },
  },
})

export default store
